#include "stdafx.h"
#include "Observateur.h"

Observateur::Observateur(){}

Observateur::Observateur(Point position, Point dest,float angle,Image* image1)
{
	Vecteur v(position, dest);
	v.normalize();

	Vecteur vup(0,1,0.0000001f);
	vup.normalize();
	 
	Vecteur w = v.produitVectoriel(vup);
	w.normalize();

	vup = v.produitVectoriel(w);
	vup.normalize();

	O_oeil = position;
	P_oeil = dest;
	angle = angle;
	image = image1;
	focale = (image->getWidth()/2.0f)/tan(angle*PI/(180*2.0f));

	obsVersGlobal.createObsGlob(w,vup,v,position);
}

Observateur::Observateur(Observateur const& o)
{
	angle = o.angle;
	focale = o.focale;
	image = o.image;
	O_oeil = o.O_oeil;
	P_oeil = o.P_oeil;
	obsVersGlobal = o.obsVersGlobal;
}

Observateur::~Observateur(){}

Observateur& Observateur::operator=(Observateur const& o)
{
	angle = o.angle;
	focale = o.focale;
	image = o.image;
	O_oeil = o.O_oeil;
	P_oeil = o.P_oeil;
	obsVersGlobal = o.obsVersGlobal;

	return *this;
}


Point Observateur::getO_oeil()
{
	return O_oeil;
}

Point Observateur::getP_oeil()
{
	return P_oeil;
}

float Observateur::getFocale()
{
	return focale;
}

float Observateur::getAngle()
{
	return angle;
}

Image Observateur::getImage()
{
	return *image;
}

Matrice Observateur::getObsVersGlobal()
{
	return obsVersGlobal;
}

void Observateur::setO_oeil(Point o)
{
	o.normalize();

	O_oeil = o;	
}

void Observateur::setP_oeil(Point p)
{
	p.normalize();

	P_oeil = p;
}

void Observateur::setAngle(float angle1)
{
	angle = angle1;
	focale = (image->getWidth()/2.0f)/tan(angle*PI/(180*2.0f));
}

void Observateur::setImage(Image* image1)
{
	image = image1;
	focale = (image->getWidth()/2.0f)/tan(angle*PI/(180*2.0f));
}



